package cl.tinet.trainee.salas.dao;

import java.util.List;

import cl.tinet.trainee.salas.model.ReservaSala;
import cl.tinet.trainee.salas.model.Segmentos;

/**
 * 
 * Interfaz del DAO Reserva.
 * 
 * @author Naht-Sams
 */
public interface ReservaDaoInterfaz {

    /**
     * Agregar un reserva de una sala.
     * 
     * @param reservaSala
     *            Datos de reserva.
     */
    void agregarReservaSala(ReservaSala reservaSala);


    /**
     * Obtener sala de sala de la BD.
     * 
     * @param codSala
     *            Codigo de la sala buscada.
     * @param fechaSeleccionada
     *            Fecha seleccionada por el usuario en la vista.
     * @return ReservaSala Devuelve una lista de reservas..
     */
    List<ReservaSala> buscarListaReservaSala(int codSala,
            String fechaSeleccionada);

    /**
     * Borrar un sala de la BD.
     * 
     * @param reservaSala
     *            Datos reserva.
     */
    void borrarReservaSala(ReservaSala reservaSala);

    /**
     * Buscar un sala antes de agregarlo a la BD.
     * 
     * @param reservaSala
     *            datos de la reserva.
     * @return devuelve una lista de reservas.
     */
    List<ReservaSala> buscarReservaSalaAntesDeCrear(ReservaSala reservaSala);

    /**
     * Buscar un sala especifico de la Bd.
     * 
     * @param reservaSala
     *            Datos de la reserva.
     * @return devuelve un objeto reserva.
     */
    ReservaSala buscarReservaSala(ReservaSala reservaSala);

    /**
     * 
     * Obtener los bloques de horario de la base de datos. Tabla referencial.
     * 
     * @return lista con los segmentos.
     */
    List<Segmentos> obtenerSegmentos();

    /**
     * 
     * Buscar las reservas que existan antes de agregar una nueva.
     * 
     * @param codSala
     *            Codigo de la sala a buscar.
     * @param fechaSeleccionada
     *            Fecha ingresada por el usuario.
     * @return Devuelve la lista con reservas.
     */
    List<ReservaSala> buscarReservaAntesAgregar(int codSala,
            String fechaSeleccionada);

    /**
     * 
     * Buscar una lista de reservas para el usuario normal.Se necesita su
     * codigo de identificacion para filtrar.
     * 
     * @param codSala Codigo de la sala a buscar.
     * @param fechaSeleccionada Fecha que selecciono el usuario.
     * @param username Usuaro que esta actualmente haciendo la busqueda.
     * @return Devuelve una lista de reservas.
     */
    List<ReservaSala> buscarListaReservaSalaNormal(int codSala,
            String fechaSeleccionada, String username);
}
